<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script>
        // 函数的参数:
        //      形参: 定义函数时写在小括号内的
        //      实参: 调用函数时写在小括号内的
        //      关系: 形参与实参一一对应
        //            形参相当于在函数内部声明一个变量,未赋值
        //            实参给对应的形参赋值
        // 获取形参的个数:  函数名.length
        // arguments:  以类数组的形式保存着实参的集合 
        // 获取实参的个数:  arguments.length
        // 函数重载:  同一个函数可以根据参数个数或类型的不同实现不同的功能
        //            JS没有函数重载,但可以利用arguments来模拟

        // function fn(a, b) {
        //     console.log(arguments[2]);
        //     console.log();
        // }

        // fn(1, 2, 3, 4);
        // console.log(fn.length);

        /*案例1:封装一个函数，求任意个数字相加的和,并在控制台输出结果*/
        // function fn() {
        //     var sum = 0;
        //     for (var i = 0; i < arguments.length; i++) {
        //         sum += arguments[i];
        //     }
        //     console.log(sum);
        // }

        // fn(1, 3, 5, 6);
        // fn(1, 3, 5);
        // fn(1, 3, 5, 7, 9, 8, 4);



        /**案例2:
         * 封装一个函数，检测任意个参数的类型
         * 如果是数字则相加，如果是字符串则拼接，其它类型不执行任何操作
         * 最后将数字相加的结果拼接在字符串后面，用‘|’隔开 ,并返回
         */
        // function fn() {
        //     var str = '',
        //         sum = 0;
        //     for (var i = 0; i < arguments.length; i++) {
        //         if (typeof arguments[i] == 'string') {
        //             str += arguments[i];
        //         } else if (typeof arguments[i] == 'number') {
        //             sum += arguments[i]
        //         }
        //     }
        //     console.log(str + '|' + sum);
        //     console.log(`${str}|${sum}`);
        // }



        // fn(1, 'a', 3, 'b', 6, 'c', true); // 'abc|10'


        /*案例3:封装一个函数,判断实参的个数
         *   一个则直接输出
         *   两个则相乘后输出
         *   三个及以上则相加后输出
         */

        function fn() {
            if (arguments.length == 1) {
                alert(arguments[0]);
            } else if (arguments.length == 2) {
                alert(arguments[0] * arguments[1]);
            } else if (arguments.length >= 3) {
                var sum = 0;
                for (var i = 0; i < arguments.length; i++) {
                    sum += arguments[i];
                }
                alert(sum);
            }
        }

        fn(2);
        fn(2, 9);
        fn(2, 9, 3, 5);
    </script>
</body>

</html>